【小ネタ】IAM Access Analyzerを全リージョン作成・削除するスクリプト(CLI/Python)
ほぼ自分用ですが、IAM Access Analyzerを全リージョン作成・削除することが何度かあったのでメモとして載せておきます。
アナライザー名はcm-access-analyzer
としていますが、適宜変更してご利用ください。
CLI
そのままコピペで実行できます。CloudShellなどにペタッと貼り付けてご利用ください。
作成用CLI
analyzer_name='cm-access-analyzer' for r in `aws ec2 describe-regions --query Regions[*].RegionName --output text` do aws accessanalyzer create-analyzer --analyzer-name $analyzer_name --type 'ACCOUNT' --region $r echo Succeeded in create IAM Access Analyzer@ $r done
削除用CLI
analyzer_name='cm-access-analyzer' for r in `aws ec2 describe-regions --query Regions[*].RegionName --output text` do aws accessanalyzer delete-analyzer --analyzer-name $analyzer_name --region $r echo Succeeded in delete IAM Access Analyzer@ $r done
Python
Python3.8.6で動作確認してます。ファイルで保存して実行、インタラクティブモードでコピペなどお好みでどうぞ。
作成用Python
import boto3 ANALYZER_NAME = "cm-access-analyzer" def handler(): regions=describe_regions() create_analyzer(regions) def create_analyzer(regions): for region in regions: accessanalyzer = boto3.client("accessanalyzer", region_name=region) try: accessanalyzer.create_analyzer(analyzerName=ANALYZER_NAME,type="ACCOUNT") print(f"Succeeded in create IAM Access Analyzer@{region}") except Exception as e: print(f"Failed to create IAM Access Analyzer@{region}") print(e) def describe_regions() -> list: try: ec2 = boto3.client('ec2') regions = list(map(lambda x: x['RegionName'], ec2.describe_regions()['Regions'])) return regions except Exception as e: print(e) raise if __name__ == '__main__': handler()
削除用Python
import boto3 ANALYZER_NAME = "cm-access-analyzer" def handler(): regions=describe_regions() delete_analyzer(regions) def delete_analyzer(regions): for region in regions: accessanalyzer = boto3.client("accessanalyzer", region_name=region) try: accessanalyzer.delete_analyzer(analyzerName=ANALYZER_NAME) print(f'Succeeded in delete IAM Access Analyzer@{region}') except Exception as e: print(f"Failed to delete IAM Access Analyzer@{region}") print(e) def describe_regions() -> list: try: ec2 = boto3.client('ec2') regions = list(map(lambda x: x['RegionName'], ec2.describe_regions()['Regions'])) return regions except Exception as e: print(e) raise if __name__ == '__main__': handler()
おわりに
全リージョンのIAM Access Analyzerを作成・削除するスクリプトを紹介しました。アーカイブルールや通知を設定する場合は、以下のような対応が必要なので注意しましょう。